use [gd1c2011]
GO



--
IF OBJECT_ID ('LAG.tablero_control','P') IS NOT NULL
    DROP PROCEDURE LAG.tablero_control ;
GO
CREATE PROCEDURE LAG.tablero_control
	@arg_Ano int , 
	@arg_idSucursal int 
AS
BEGIN
	DECLARE @TotalCantVentas int ;
	DECLARE @TotalFacturacion float ;
	DECLARE @TotalCantFacEnCuotas int ;
	DECLARE @MayorMontoFactura float ;
	DECLARE @MayorDeudor varchar(1000)   , @MayorDeudorImporte float ;
	DECLARE @MejorVendedor varchar(1000) , @MejorVendedorImporte float ;
	DECLARE @MejorProducto varchar(1000) , @MejorProductoCant int ;
	DECLARE @ProdSinStock varchar(1000)  , @ProdSinStockDias int;
	DECLARE @primerDiaAno datetime , @ultimoDiaAno datetime , @hoy datetime ;
	-- Facturacion
	SELECT 
		@TotalCantVentas = count(*) , 
		@TotalFacturacion = sum(f.total) ,
		@TotalCantFacEnCuotas = sum( case f.cantCuotas when 1 then 0 else 1 end ) ,
		@MayorMontoFactura = max(f.total) 
	FROM LAG.facturas f
	WHERE year(f.fecha) = @arg_Ano AND idSucursal = @arg_idSucursal ;
	-- Mayor Deudor
	SELECT TOP 1
		@MayorDeudor = ( per.nombre +' '+per.apellido+', '+cast(per.dni as varchar) ) ,
		@MayorDeudorImporte = (SUM(f.total) - SUM(pag.monto))
	FROM LAG.facturas f
		JOIN LAG.pagos pag ON pag.nroFactura = f.nroFactura
		JOIN LAG.personas per ON per.idPersona = f.idCliente
	WHERE year( f.fecha ) = @arg_Ano AND f.idSucursal = @arg_idSucursal
	GROUP BY ( per.nombre +' '+per.apellido+', '+cast(per.dni as varchar) )
	ORDER BY (SUM(f.total) - SUM(pag.monto)) DESC;
	-- Vendedor del Ano
	SELECT TOP 1
		@MejorVendedor = ( per.nombre +' '+per.apellido+', '+cast(per.dni as varchar) ) ,
		@MejorVendedorImporte = sum( f.total )
	FROM LAG.facturas f
		JOIN LAG.usuarios usu ON usu.idUsuario = f.idUsuario
		JOIN LAG.personas per ON per.idPersona = usu.idPersona
	WHERE year( f.fecha ) = @arg_Ano AND f.idSucursal = @arg_idSucursal
	GROUP BY ( per.nombre +' '+per.apellido+', '+cast(per.dni as varchar) )
	ORDER BY sum( f.total ) DESC ;
	-- Producto del Ano
	SELECT TOP 1
		@MejorProducto = ( cast( fit.idProducto as varchar )+' , '+pro.nomProducto+' , '+ cat.nomCategoria ) ,
		@MejorProductoCant = sum( fit.cantidad )
	FROM LAG.facturas_items fit
		JOIN LAG.facturas fac ON fac.nroFactura = fit.nroFactura
		JOIN LAG.productos pro ON pro.idProducto = fit.idProducto
		JOIN LAG.productos_categorias cat ON cat.idCategoria = pro.idCategoria
	WHERE year( fac.fecha ) = @arg_Ano AND fac.idSucursal = @arg_idSucursal
	GROUP BY ( cast( fit.idProducto as varchar )+' , '+pro.nomProducto+' , '+ cat.nomCategoria )
	ORDER BY sum( fit.cantidad ) DESC ;
	-- Faltante de stock
	set @primerDiaAno = cast(cast(@arg_Ano as varchar)+'-01-01' as datetime ) ;
	set @ultimoDiaAno = cast(cast(@arg_Ano as varchar)+'-12-31' as datetime ) ;
	set @hoy = CURRENT_TIMESTAMP ;
	SELECT TOP 1
		@ProdSinStock = cast( sc.idProducto as varchar) + ' , ' 
			+ cast( DATEDIFF(day, case when sc.fechaInicial < @primerDiaAno then @primerDiaAno else sc.fechaInicial end ,
			case when isnull(sc.fechaFin,@hoy) > @ultimoDiaAno then @ultimoDiaAno else isnull(sc.fechaFin,@hoy) end ) as varchar ) ,
		@ProdSinStockDias = DATEDIFF(day, case when sc.fechaInicial < @primerDiaAno then @primerDiaAno else sc.fechaInicial end ,
			case when isnull(sc.fechaFin,@hoy) > @ultimoDiaAno then @ultimoDiaAno else isnull(sc.fechaFin,@hoy) end )
	FROM LAG.stock_cero sc
	WHERE ( year(sc.fechaInicial) = @arg_Ano OR year(sc.fechaFin) = @arg_Ano ) 
		AND sc.idSucursal = @arg_idSucursal 
	ORDER BY DATEDIFF(day, case when sc.fechaInicial < @primerDiaAno then @primerDiaAno else sc.fechaInicial end ,
			case when isnull(sc.fechaFin,@hoy) > @ultimoDiaAno then @ultimoDiaAno else isnull(sc.fechaFin,@hoy) end ) DESC ;
	-- acondicionamiento de valores.
	if @MayorDeudor IS NULL
	begin
		set @MayorDeudor = 'ninguno'
		set @MayorDeudorImporte = 0 ;
	end
	if @MejorVendedor IS NULL
	begin
		set @MejorVendedor = 'ninguno'
		set @MejorVendedorImporte = 0 ; 
	end
	if @MejorProducto IS NULL 
	begin
		set @MejorProducto = 'ninguno'
		set @MejorProductoCant = 0 ;
	end
	if @ProdSinStock IS NULL 
	begin
		set @ProdSinStock = 'No hubo';
		set @ProdSinStockDias = 0 ;
	end
	-- reporte
	SELECT 
		@TotalCantVentas AS TotalCantVentas ,
		@TotalFacturacion AS TotalFacturacion ,
		@TotalCantFacEnCuotas AS TotalCantFacEnCuotas ,
		@MayorMontoFactura AS MayorMontoFactura ,
		@MayorDeudor AS MayorDeudor ,
		@MayorDeudorImporte AS MayorDeudorImporte ,
		@MejorVendedor AS MejorVendedor ,
		@MejorVendedorImporte AS MejorVendedorImporte ,
		@MejorProducto AS MejorProducto ,
		@MejorProductoCant AS MejorProductoCant ,
		@ProdSinStock AS ProdSinStock ,
		@ProdSinStockDias AS ProdSinStockDias 
		;
		
END
GO



EXEC LAG.tablero_control 2005,2
	

/*1248681639 , Parlante , Parlantes
declare @d datetime ;
set @d = '2011-01-01'
print @d+1
*/

